﻿using System.Collections.Generic;
using Business;
using Business.Entity.Vendas.MovimentacaoCaixa;
using Business.Entity.Vendas.MovimentacaoCaixa.SubClass.LancamentoInicial;
using Business.Entity.Vendas.MovimentacaoCaixa.SubClass.PagamentoCliente;
using Business.Entity.Vendas.MovimentacaoCaixa.SubClass.RecebimentoVenda;
using Business.Entity.Vendas.MovimentacaoCaixa.SubClass.Sangria;
using Business.Entity.Vendas.MovimentacaoCaixa.SubClass.Suprimento;

namespace Vendas.Models
{
    public class FechamentoModel
    {


        public decimal LancamentoInicial { get; set; }
        public IList<Suprimento> Suprimentos { get; set; }
        public IList<Sangria> Sangrias { get; set; }
        public IList<PagamentoCliente> PagamentosCliente { get; set; }
        public IList<FormaRecebimentoVendaDia> FormaRecebimento { get; set; }
        public decimal VendasAVista { get; set; }
        public decimal VendasAPrazo { get; set; }
        public decimal RecebimentosAVista { get; set; }
        public decimal RecebimentosAPrazo { get; set; }
        public decimal TotalSuprimento { get; set; }
        public decimal TotalSangria { get; set; }
        public decimal TotalEmCaixa { get; set; }

        public FechamentoModel()
        {
            var lancInicial = LancamentoInicialRepository
                .DiaLancado(Utils.Terminal.ConfiguracaoEcf.Caixa);
            FormaRecebimento = new List<FormaRecebimentoVendaDia>();
            LancamentoInicial = lancInicial != null ? lancInicial.Valor : 0;
            Suprimentos = SuprimentoRepository.SuprimentosDia(Utils.Terminal.ConfiguracaoEcf.Caixa);
            Sangrias = SangriaRepository.SangriasDia(Utils.Terminal.ConfiguracaoEcf.Caixa);
            PagamentosCliente = PagamentoClienteRepository.PagamentosDia(
                Utils.Terminal.ConfiguracaoEcf.Caixa);
            CalcularValores();
        }





        private void CalcularValores()
        {
            VendasAPrazo = 0;
            VendasAVista = 0;
            RecebimentosAPrazo = 0;
            RecebimentosAVista = 0;
            TotalSangria = 0;
            TotalSuprimento = 0;

            var pags = RecebimentoVendaRepository.RecebimentosDia(Utils.Terminal.ConfiguracaoEcf.Caixa);
            foreach (var recebimento in pags)
            {
                GetFormaRecebimento(recebimento).Total += recebimento.Valor;
                if (recebimento.FormaPagamento.PrazoCompensacao ==0)
                {
                    VendasAVista += recebimento.Valor;
                }
                else
                {
                    VendasAPrazo += recebimento.Valor;
                }
            }
            foreach (var pagCliente in PagamentosCliente)
            {
                if (pagCliente.TipoRecebimento.PrazoCompensacao == 0)
                {
                    RecebimentosAVista += pagCliente.Valor;
                }
                else
                {
                    RecebimentosAPrazo += pagCliente.Valor;
                }
            }
            foreach (var sup in Suprimentos)
            {
                TotalSuprimento += sup.Valor;
            }
            foreach (var sang in Sangrias)
            {
                TotalSangria += sang.Valor;
            }
            TotalEmCaixa = TotalSuprimento + LancamentoInicial + VendasAVista + RecebimentosAVista + TotalSangria;
        }

        private FormaRecebimentoVendaDia GetFormaRecebimento(RecebimentoVenda recebimento)
        {

            FormaRecebimentoVendaDia ret = null;
            foreach (var receb in FormaRecebimento)
            {
                if (receb.FormaPagamento.Id == recebimento.FormaPagamento.Id)
                {
                    ret = receb;
                }
            }
            if (ret == null)
            {
                ret = new FormaRecebimentoVendaDia
                {
                    FormaPagamento = recebimento.FormaPagamento,
                    Total = 0
                };
                FormaRecebimento.Add(ret);
            }
            return ret;
        }
    }
}
